約 300,733 件
https://w.atwiki.jp/sm4wiki/pages/19.html
ここは? 資料が英語ばかりの鬼門「HDMA」の説明らしき物です。 しかしHDMAはおろかWikiの編集も付け焼刃なのでグダグダです。 墓場のうんちくが来るまでの間に合わせってことでよろしく。 目次 ここは? [#h9022c01] 目次 [#m117020a] ?描画あれこれ [#qe5799a9] 走査線/Scanline、H-blank、V-blank [#s7ad179f] 実際に描画するには [#zee7eb24] ?まず何をすればいい? [#o1443331] ?PPU[#jff40a94] ?チャンネルとテーブル [#r8718413] テーブル [#j3bdbd92] チャンネル [#c977e4fd] 補足 チャンネルとテーブルの関係 [#b19b7240] ?実践1:サイズの異なるモザイク [#bc6548fb] チャンネルの設定 [#se5733dc] 転送内容と効果 [#n2307603] ?スクリーンあれこれ [#z4e04003] メインスクリーン、サブスクリーン [#g3bb16ac] 通常のLevelでの描画構成 [#mfc136d2] ?実践2:固定色層の応用を考える [#e9a40961] ?実践3:固定色層の応用を考える? [#g0553344] ?実践3:マルチレイヤースクロール [#q09f9eb3] 目的 [#y6f40c3f] RAM $210F [#ib0461ea] 極めて遠くにあるもの [#i86da7f5] それほど遠くないもの [#nd3b86ce] 補足 簡易説明 [#affb0983] ?ウィンドウあれこれ [#j74c93ce] コメント [#j4f3b79e] ?描画あれこれ 走査線/Scanline、H-blank、V-blank SFCでは画面が1秒間に60フレームほど描かれている気がします。 そのうちの1回を取り上げて考えてみましょう。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (a.png) まずは左上の1ドットから描画がスタートし、右上に向かいます。 こうして一番上の1行が描かれます。 こういった横方向の行を「走査線 Scanline」と言います。 一番上の行がScanline 0です。 二番目の行がScanline 1です。 一行目が右まで描かれると、次は二行目の左端を描くことになりますが、 それまでに僅かな休み時間があります。これがH-blankです。 同様に、各Scanlineの描画が終わるたびにH-blankが来ます。 ゲーム画面の一番下の行はScanline 225 です。 ここまで描ききった後のScanline 226〜261にあたる期間は もうずっと休み時間です。これをV-blankと言います。 H-blankが土日だとしたら、V-blankは長期休暇みたいなものなので長いです。 その後はScanline 0に戻り、次のフレームの描画が始まります。 実際に描画するには さて、なぜこんなblankの話をしてるかというと、 描画情報の変更はこのblank中でやらなければならないからです。 だからLevelASMとかで直接描画情報を変えようとしても、 その瞬間が奇跡的にblank中だった場合しかうまく行かないことになります。 ただしいくつかのエミュではこういうのを考慮してないので blank無視しても正常に動作してしまう罠。 実機で動かなくてもエミュで動けばいいじゃんと見るかどうかは人によるけど… 最新のエミュでは、ちゃんと(?)blank無視した変更は反映されないようになってます。 じゃあblankのタイミングを狙うにはどうすればいいのか? 1つは、NMIという割り込みを利用する方法です。 画面下、Scanline 225を描いてV-blankに突入した瞬間、 流れているプログラムは一旦ストップ。 Snes $00816Aから始まるNMIルーチンが割り込んできます。 この中でblank中でなければならない処理を まとめてやってしまうというのです。 しかしblankはV-blankだけではありません。 H-blank中に描画設定を変えるとどうなるでしょう。 たとえば、Scanline0の前で明るい画面に設定し、 Scanline112の後のH-blankで暗い画面に設定すれば、 画面上半分(0〜112)は明るく、画面下半分(113〜225)は暗くなります。 このようにScanlineとScanlineの間で描画設定を変えることができます。 こういった、指定したH-blankで描画設定を変えるという処理を 自動的にやってくれる装置があります。 これがHDMAです。 ?まず何をすればいい? まずはHDMAを実装しましょう。いくつか方法があります。 ・CからBMF98567氏のHDMAを持ってきてインストール ・自作物展示場や、あっぷろだXのASM_Supporter 余計な機能がつきすぎるのが嫌でなければ、 ASM_Supporterをオススメします。 後先考えるとインスタントNMIがあった方が便利っちゃあ便利。 xkasの使い方は、あっぷろだXを参照。 いや、CMのつもりでは… 要望があれば、HDMAだけを入れるバージョンも作りますが。 ?PPU さんざん「描画設定を変える」とかいう表現を使ってきたわけですが、 とりあえずそれがどういうことかを知らなければなりません。 SFCにはPPUというユニットがあり、 こちらのプログラムとは独立して、描画処理を行ってます。 このPPUにこちらから働きかけます。 難しそうですが、結局は$21xxへのストアです。 $21xxに値をストアするというのがPPUとの手動通信です。 とりあえずすずめ愛好会のこのページを見てみましょう。 対してHDMAは自動通信です。 HDMAは「Scanline毎に$21xxの値を自動で変えてくれる物」 だということになります。 ?チャンネルとテーブル ついに実際に簡単なHDMA効果を作ってみます。 しかし、いきなりLevelASMから作るのは大変なので、 チートで作ることにしましょう。 テストもしやすいですし。 というわけで、代入可能なメモリビューアがついているエミュを用意しましょう。 ちなみに私が使っているのは音楽再現度的な意味でSNESGTです。 最新のβ版ではblankも考慮されている上、 指定アドレスにジャンプができるので旧版より使いやすいです。 テーブル まずHDMAをインストールしたROMを起動して好きなLevelに行き、ポーズ。 メモリビューアを開いて、HDMAテーブルのある位置を見ましょう。 初期設定ではテーブルの位置は、BMF98567氏のHDMAでは$7FFF00 ASM_Supporterでは$7FFE00と決められています。(現在の設定では$7F8190ですが変更可能) この先は後者として話を進めていきますので、 前者の場合は、各アドレスの3桁目をE⇒Fと脳内変換してください。 これからこのテーブルという領域に、 HDMAに必要な手続きを行っていきます。 そしたら先ほどインストールしたHDMA内部機構が 手続きに従い、自動的にHDMAを実行してくれるのです。 チャンネル HDMAには0〜7の8つのチャンネルがあります。 各チャンネルに「Scanline毎に$21xxの値を変える」という 一まとまりの仕事を割り振ることができます。 つまり最大同時に8種類の仕事をさせることができるのです。 ただ本家でもHDMAが使われている箇所があるので、 本家HDMAの使用チャンネルとかぶるとキャンセルされてしまうかも。 チャンネル3辺りを使えば心配無いでしょう。 本家HDMAの使用状況を知りたければ、 ここにあるデバッグ用Snes9xでHDMAをトレースしてみましょう。 補足 チャンネルとテーブルの関係 自分が理解するのに詰まったところなので勝手に補足。 さて、上記のようにHDMAには8つのチャンネルがあり、同時に最大8種類の効果を出すことができます。 色々弄れば色々効果が出せるわけですが難しい。そこで「必要事項を指定の場所に入れてくれれば後はやってやんよ」 というのがBMF98567氏の作ったものです。 まず「チャンネルの設定パラメータを入れるRAMアドレス」(=チャンネルごとのテーブル)がチャンネルごとに6つずつあります。 ここに転送方法とか弄る対象とか、設定を適宜入れていきます。 ここで設定した「転送したいデータを入れるRAMアドレス」(=転送内容のテーブル)に、弄る走査線の数などを入れていきます。 前者はxkasなどでプログラムを挿入するときに決めるもので、後から変更はできず、 後者は毎回自分の好きなところに指定する必要があります。 次項からその実践です。 ?実践1:サイズの異なるモザイク チャンネルの設定 まずはシンプルな1バイト入力系をやりましょう。 モザイク設定は$2106ですね。 テーブル周辺ははじめは全部00になっています。 ここにメモリビューアから入力していきます。 結論を言うと、下のスクショですね。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (b.png) ここまで行く過程を説明しましょう。 まず「チャンネル3」を使うことに決めました。 図のチャンネル3テーブルに基本設定パラメータを書いていきます。 まずはチャンネルON宣言です。 テーブルの1バイト目には、下の表に従って値を入れましょう。 今回はチャンネル3なので、08ですね。 チャンネル 0 1 2 3 4 5 6 7 1バイト目の値 01 02 04 08 10 20 40 80 ただし、今すぐ入力するのはやめてください。 まだ設定が終わってないのにスイッチONにするのは自殺行為ですね。 軽くバグります。 2バイト目は、転送方式の設定です。 一番難しいところです。下の表を見ましょう。 2バイト目の値 1回分の処理の挙動 使用例 使用例で何が起こるか 00 1アドレスへ1byte書き $2106にXXを代入 モザイク設定がXXに 01 2アドレスへ1byte書き $2126にXX⇒$2127にYY ウィンドウ1左端XX、右端YY 02 1アドレスへ2byte書き $210FにXX、ついでYY レイヤー2 x座標がYYXXに 03 2アドレスへ2byte書き 拡大縮小回転マトリクス 2chに分けて画面に濃淡の演出使用してるゲーム例 アダムスファミリー 04 4アドレスへ1byte書き 思いつかん $2106は単純に1バイトを入力するものなので 00を入力します。 3バイト目は、弄る対象です。$21xxのxxを入力します。 今回は$2106モザイクなので、06です。 4〜6バイト目に、転送内容テーブルのありかを入力します。 空き場所ならどこでもいいですが、 今回は近くの$7FFE40に「転送内容」を書いていくことにします。 よって40 FE 7F 転送内容と効果 さて、ついに基礎設定が完了しました。 次はいよいよ「転送内容」を書いていきます。 さっき$7FFE40に指定したので、そこに書いていきましょう。 基本は「上から数えるScanline数⇒代入値」の繰り返しです。 こっからは好きなようにしていいですが… とりあえず上から40行分にサイズAの大モザイクをかけてみましょう。 $2106の設定はAFです。 よってまず「40 AF」と書いていきます。 画面全体にモザイクがかかるでしょうが、無視して次行きましょう。 次の40行分はモザイクをサイズ6と、少し小さくしてみます。 続きに「40 6F」と書きます。 次第に小さくして、最終的に「40 AF 40 6F 40 2F 40 00 (00)」としました。 その結果がスクショです。そのとおりになってますね。 ちなみに(00)は終了宣言です。 こうして、チートでHDMAを作ることができました。 あとは今回のチート入力を再現するLevelASMを組むだけです。 組み方は65C816プログラミングの方を見ましょう。 ?スクリーンあれこれ メインスクリーン、サブスクリーン このへんからだいぶ怪しい説明になります。 変なこと言ってたら直しちゃってください。 次のステップに進む前に メインスクリーン、サブスクリーンとかを知っておくといいです。 もう一度すずめ愛好会を見ましょう。 今回見るべきは、 $212C(メインスクリーン構成) $212D(サブスクリーン構成) $2131(カラー演算対象設定 $40から転記) $2132(固定色層の色) ただし、$2131に関しては、 毎フレームのNMIで$40からコピーされているで、 $2131を弄ってもすぐ潰されてしまいます。 かわりに$40を弄ればOKです。 描画される画面は、 スプライト・固定色・BG1・BG2・BG3・BG4といった層の 重ね合わせで構成されているのですが、 細かく言うともう少し複雑です。 これらの層をメインスクリーン・サブスクリーンにグループ分け。 私たちにはメインスクリーンだけが見えます。 内部でサブスクリーンというのを別に構成しておきます。 この結果を、「メインスクリーンのうちの背景層」に足し加える。(カラー演算) そういう足し算の結果、メインスクリーンの後ろにサブスクリーンがあるように見えます。 足し算というとわかりにくいですね。 サブスクリーンの内容を、プロジェクターで映し出すような感じです。 $40に関してはここでも説明しておきましょう。 $40の8つのbitを と表すとすれば、それぞれ スクリーン構成は メイン…BG1,SP サブ …BG2,BG3 $40 = 20 (+OB....)なので、加算対象は背景層のみ。 図示すると下のよう。#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (c.png) さて、ここで一つ考えてみましょう。 サブスクリーンが背景層に加算されていますが、 これをやめたらどうなるでしょう? $40の値を20⇒00にしてみましょう。 「BG2、BG3、固定色」が見えなくなります。 では、背景層だけでなく、BG1にも加算するとどうなるでしょう。 $40の値を、20⇒21にしてみましょう。 プロジェクターが背景層だけでなく、レイヤー1にも照射をするという感じで、 レイヤー1にサブスクリーンの内容が映ってしまいます。 つまり、レイヤー1が透けているように見えます。 同様に、スプライトにも照射して透けさせることができますが、 スプライトのうち「前面に表示」設定のタイルは どういうわけか特別扱いを受けているようです。 こういった加算の影響を受けません。 お化け屋敷ではこれを利用して、 透けたテレサ・透けないテレサを区別しているようです。 さて、これを見ていると、 別にBG1,2,3,スプライト全てをメインスクリーンに設定してもいい気がします。 何故こんな回りくどいことをしているのか。 それは、スプライトのうち「背面に表示」設定のタイルのためです。 こう設定すると、タイルはメインスクリーンの一番後ろに行きます。 BG2をメインスクリーンに設定すると、タイルがBG2背景の後ろに表示されます。 要するに、ピーパックンとかが背景の後ろに消えてしまうのです。 一方、レイヤー2を使ったマップでは、 別にスプライトがレイヤー2に隠れても問題ありません。 なのでここではBG2はメインスクリーンに設定されています。 ?実践2:固定色層の応用を考える さて、上の図の中に、固定色層というのがありますね。 これについて考えてみましょう。 こいつは$2132での色設定に従った単色層です。 見ての通りSMWの通常Levelでは、これはBGカラーとして使われています。 LMで設定された背景色は、RAM $0701-$0702 に保存されていて、 ここの値が毎フレーム$2132に代入されています。 ですから$0701を弄れば固定色層の色を変えることができ、 結果背景の色が変わります。 $2132を弄るHDMAをつけてみましょう。 Scanline毎に固定色層の色を変えるって事です。 こうなると固定色層はもはや単色ではなく、 グラデーションのかかったきれいな層となります。 やり方は前回とほとんど同じです。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (d.png) ▲ウホッ、いい空… 1バイト目はスイッチ。 2バイト目は転送設定。「00」 3バイト目は弄る対象が$2132だから「32」 そして転送内容データの置き場所を設定して、 そこに「走査線数」⇒「値」⇒「走査線数」⇒「値」… HDMA自体の基本は全く同じ。 今回注意したいことは、$2132の使い方が少し変則的なことです。 $2132に入力するのは、「固定色層の色」という値ではなく、 「PPUよ、R/G/Bの値をxxに変えよ!」という命令なのです。 PPUの内部で固定色層の色が(R 12)(G 02)(B 0F)となっていたとします。 図にも書いてある通り、 20 + xx の値を$2132に入力すると、 PPUはRの値をxxにしろという命令を受け、 (R xx)(G 02)(B 0F)というふうに変えます。 60 + xx の値を$2132に入力すると、 PPUはRとGの値をxxにしろという命令を受け、 (R xx)(G xx)(B 0F)というふうに変えます。 もう気づいたでしょうが、$2132への入力一発では、 RGBに同時に異なる値を設定することはできません。 転送設定「00」では、1スキャンラインで入力できるのは一回だけ。 これが不自由だと思うなら、転送設定「02」を使えばいいかも。 その場合、転送内容のところには 「Scanline数」⇒「値(1byte目)」⇒「値(2byte目)」⇒「Scanline数」… となるので、3バイト1グループになることに注意。 さて、図のグラデーションの組み方ですが、 まずScanline0の描画開始前に「LMで設定した背景色$0701」の値が (R)(G)(B)に代入されています。今回は淡い青です。 Scanline 0 …「60」RとGを00にして深い青にする Scanline 2 …「9F」Bを1F(max)にして濃い青にする Scanline 5 …「62」RとGを02にして少し明るくする Scanline 9 …「63」RとGを03にしてもう少し明るくする : : とまあ、こんな感じでグラデーションをやっていってます。 狙い通りの色合いを出すなら、やはり見ながら調整できるチートが便利。 完成したらLevelASMを組みましょう。 ?実践3:固定色層の応用を考える? しかしCとかで流行っているグラデーション演出は、 さっきのとは少し違ったはずです。 なんていうか、背景ではなく画面全体に色が映っているかのような。 ?での知識を活かして、こちらをやってみましょう。 まずBG1-3、SPといったレイヤーを全てメインスクリーンに移してしまいます。 こうするとサブスクリーンにあるのは固定色層のみになります。 ここでこのサブスクリーンを、メインスクリーンの全ての層、 レイヤー123・スプライト・背景に映し出せばOKです。 $40に37を代入しましょう。 この時ピーパックンなどがレイヤー2の後ろに行ってしまう問題は、 どうしようもありません。副作用だと思ってください。 この場合はピーパックンを使わないか、 ピーパックンのグラフィックルーチンを弄って フラグによっては前面に出るようにするか。 インスタントNMIを使って$0303,xにしらみつぶしにTSB #$30しまくるか。 どのみちこの設定ではレイヤー1と2の間にスプライトを挟むことはできないので まあ使わないのが一番でしょう。 さて、今回はHDMAチートの前に準備が必要です。 まずメイン/サブスクリーンの設定をしなくてはなりません。 これらはSMWでは『$2131←$40』のようにサポートされていないので、 自作のLevelASMでやる必要があります。 まずはそこから作ってみましょう。 $212C(メインスクリーン構成)に17を代入し、 $212D(サブスクリーン構成)に00を代入します。 エミュでは普通にLevelASMから直接代入してもできるんですが、 本家SMWでPPUアクセスは全てNMIに回されているのを見るに、 恐らく実機では動かないのでしょう。 従って、インスタントNMIでやります。(CMじゃry) 講座も来たことだし、xkas用でいいよね! !NMI = インスタントNMIのJSLのありかとします。 CodeStart LDA $06B6;処理は開始1回だけで十分 BEQ INIT;ステージ開始時は00になっているからINITへ RTL INIT INC $06B6;2回は行わないようにする ;INCすることで、2回目以降は ;BEQ INITされない STZ $24;ステータスバー特別扱い解除 LDA #$01; TSB $06AD; LDA #$37;固定色層を、全レイヤーに投射 STA $40 JSL !NMI;次のV-blankのときに JSL NMIset;JSL NMIsetが行われるよう予約 RTL NMIset LDA #$17;予約内容 STA $212C;メインスクリーン:全部 STZ $212D;サブスクリーン :固定色のみ RTL このLevelASMを入れたステージに行ってみましょう。 画面全体が背景色を帯びていることだと思います。(マリオは無事) $701-2を弄って、色が変わることを確認しましょう。 本来背景色だったものを前面に持ってくるギミックなので、 もともと背景色があまり使われていないスイッチ宮殿や、城等でやると映えます。 さて、単色では物足りないなら、ここでHDMAです。 背景グラデーションの時と全く同じなので、図だけを投下しておきます。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (e.png) LevelASMコードも投下しておきます。 ただし、CONTENTの内容がとても長いので、 外部ファイルGRAD.binとして入れるようにしています。 自信のある人は解読してみてください。 ?実践3:マルチレイヤースクロール 目的 今回のテーマは「『転送内容データ』を動的に変化させる」です。 「背景としてのレイヤー2」を3D的にスクロールさせることが目的です。 今回は下の背景を3Dスクロールさせてみましょう。 (既にHDMAグラデーションをかけてあります。) #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (f.PNG) そうそう、前回言い忘れてましたが、 加算グラデーションをかける時は、元の色を暗めにしておきましょう。 加算なので、RGB各成分を元の色より下げることはできませんし。 さて、普通の設定では、 雲も海のどの部分も、同じ分だけスクロールしてしまいます。 これは奇妙。 近景は速く、遠景は遅く動いて見えるようにしたいものです。 RAM $210F $210Fはレイヤー2スクロールのx座標。 むしろレイヤー2を映すカメラのx座標と言ったほうが分かりやすいかも。 LunarMagicで見るような、レイヤー2の一枚絵を 正面から映しているカメラを想像しましょう。 xが大きいほど、カメラは右にあることになります。 xを増やすと、カメラは右に進み、 すると映像ではレイヤー2が左に流れていくことになります。 図も載せときます。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (g.png) 普段はRAMの$1466から転記されているこの値。 これをScanlineごとに変えればいいのですが、 変える値は前回までと違って、リアルタイムに変化します。 「転送内容データ」は、今までどおり 「走査線数」⇒「転送内容(2byte)」⇒ の繰り返しです。 RAMに置いてあるこいつを、 ASMによって「転送内容(2byte)」の部分を 絶えず書き換えることが必要になります。 で、どういう値に書き換えればいいのか。 極めて遠くにあるもの 太陽・星・雲などがそうです。ここまで遠くにあると、 マリオがどこにいても同じように見えるはずです。 よって観測者の位置(レイヤー1座標)とは関係無く動くはずです。 今回は画面上の雲がそれにあたります。 この背景では雲が上中下3列あるので、 試しに各列が違う速度で左に流れるようにしてみましょう。 左に流すにはカメラを右に動かせばいいので、 「$210Fの値がどんどん増える。」ようにします。 各列の幅を計ったら、1F,20,20でうまくいったので、 「転送内容データ」のはじめの部分は 1F xxxx 20 yyyy 20 zzzz。 xxxx、yyyy、zzzzそれぞれに「違う速度で増えていく値」 がストアされるようにすればいいのです。 組み方わかる人は次の見出しまで飛ばしましょう。 まずはASMの側でカウンターを用意しましょう。 空きRAMならどこでもいいのですが… 今回は$7FFEF0を使ってみます。 毎フレームこれに1を足す。 これで$7FFEF0は「毎フレーム1増える値」として機能します。 次に$7FFEF0を使って雲をスクロールさせます。 「毎フレーム1増える」というのはマリオの歩行速度並なので 雲にしては速すぎです。 では、『$7FFEF0の1/2倍』という数字はどうでしょうか。 これは「2フレームに1増える値」として機能します。 スピードが半分になりました。 同様に、$7FFEF0の1/4倍、3/8倍という数字を使えば、 流れるスピードは1/4倍、3/8倍になります。 そこで今回は、 「上段の雲…スピード1/2」 「中段の雲…スピード3/8」 「下段の雲…スピード1/4」 としてみます。 1/2とか1/4をやるなら、ASLやLSR命令を覚えましょう。 12345という数字の各桁を右に動かすと、1234.5。1/10になってしまいます。 各桁を左に動かすと、123450。10倍になってしまいます。 これは10進法だからです。 2進法の世界では、桁を右に動かすと1/2、左に動かすと2倍になります。 LSR(右)、ASL(左)という命令がそれにあたります。 $7FFEF0にLSRした値を「上段の雲があるScanlineでの$210F値」に設定。 もう一度LSRした値を「下段の雲があるScanlineでの$210F値」に設定。 さて、中段の3/8倍という処理ですが、 $7FFEF0を『3倍してから8で割る』ことによって可能です。 注意すべきは、『8で割ってから3倍する』ではダメなこと。 なぜなら、『8で割った』値は、「8フレームに1回1増える」。 それを3倍すると、「8フレームに1回3増える」。 こういうカックカクな動きになってしまうからです。 前者をやれば「8フレームに3回1増える」ので、滑らかです。 $7FFEF0をLDA ⇒ ASL ⇒ $7FFEF0をADC ⇒ LSR3回 によって中段の値が得られます。 それほど遠くないもの 星や雲ほど遠くにある物でないならば、 こちらの動きによって見え方がかわります。 今回は海がそうです。 視点を動かしていくと、 近くのものほど速く動き、遠くのものほど遅く動きます。 視点からの遠さが同じものは、同じ速さで動くはずです。 背景の物体がもし、マリオやレイヤー1と同じ遠さにあるならば、 レイヤー1と同じ速さで(視点の動きに対し)スクロールするはずです。 このとき、$210F = レイヤー1x座標 これで視点の動きに対するスクロールが再現できます。 次に、その背景物体自体が動いてた場合。 視点の動きに加え、さらに物体自体の動きも反映させるには、 $210F = レイヤー1 x座 - 物体の移動値 なぜ引き算かというと、雲の時と同じです。 レイヤー2の静止した一枚絵が右に動く様子を再現するには、 逆にカメラを左に動かすことになるからです。 さて、以上は物体がマリオのそば、レイヤー1と同じ層にいた時の話です。 もっと遠くにあれば、視点に対してもっとゆっくりスクロールするはず。 $210F =(レイヤー1 x座 − もしレイヤー1の距離にいた場合の物体の移動値)× 距離補正 ~ これが一応最終公式となります。 今回の海に適用するとどうなるでしょう。 レイヤー1座標は$1462から得られます。 次にもし海がレイヤー1の距離、つまりマリオの足元にあった場合の移動値を考えます。 今回は波が左にマリオの歩行距離程度の速度で流れるという風にしてみましょう。 波の移動値は毎フレーム-1です。これを引くということは、 「毎フレーム+1する値を足す」のと同じです。 雲の時のカウンタ$7FFEF0を流用しましょう。 また、波なので、左に流れながらも多少ゆらゆらさせてもいいかもしれません。 「ゆらゆらする値」をさらに足しこめばOKです。 「ゆらゆらする値」の取り方の一例 LDA $14 (タイマ) AND #$0F TAX LDA WAVE,x : : WAVE db $00,$00,$00,$01,$01,$02,$03,$03 db $04,$04,$04,$03,$03,$02,$01,$01 こうして、$1462 + $7FFEF0 + WAVE,x という 『波がマリオのそばにあったときの値』を得ました。 とりあえずこれを$7FFEF2に保存しておきます。 その後最後に、距離補正を加えるために数字を掛け、 各Scanlineの$210F値としてストアします。 この掛ける数をScanline毎に色々変えることで、 視点からの距離の奥行きを表現することができます。 これがHDMAで3Dを擬似的に再現できる仕組みです。 (Scanline毎にしか奥行きを変えれないので、 同じScanlineに異なる遠さの物が置けない制限はあるが) さて、海という大変なテーマを選んでしまいました。 どのScanlineも遠さが違います。 かなり多くの段階に分けて距離補正値を変えなくてはなりません。 めんどくさいので20段階くらいに留めます。十分でしょう。 一番近い所でも、マリオよりは遠くにあるので、1倍よりは小さい。 一番遠い所、つまり水平線付近は相当遠いので、1/32倍くらいでOKしょう。 その間を20段階くらいにわけて設定する。 計算方法は自由ですが、自分が思いつく中で一番早いやり方を紹介します。 7/8, 3/4, 5/8, 1/2 7/16, 3/8, 5/16, 1/4 7/32, 3/16, 5/32, 1/8 7/64, 3/32, 5/64, 1/16 7/128,3/64, 5/128,1/32 ラインナップは上の通り。右に読んでいけば大きい(近い)順です。 分子が同じものをひとまとめに計算していきます。 まず$7FFEF2(元の値)から、 元の値の2倍⇒$7FFEF4 (ASL) 元の値の3倍⇒$7FFEF6 (更に$7FFEF2を足す) 元の値の5倍⇒$7FFEF8 (更に$7FFEF4を足す) 元の値の7倍⇒A (更に$7FFEF4を足す) と計算します。 あとはLSRLSR...で分子7のものを全部計算しつつストア。 $7FFEF8をLDAしてLSRLSR...で分子5のものを全部計算しつつストア。 同様に分子3、分子1も全部計算ストアしてミッションコンプリート。 完成品と、LevelASMコードを http //mario.ellize.com/up/src/smw_2022.zipにおいておきます。 紛失したようです。持ってる人居たら、WikiにUPお願いします。 もっといい計算法があったら言ってね。 補足 簡易説明 いきなりハードな内容で、うわぁああああとなった人が多そうなので、 まとめ兼1番簡単な多重スクロールの説明を勝手に補足。 まず雲のような、マリオとは関係なく画面を流れていくものについて。 レイヤー2の位置を毎フレーム1増やせばOK、と考える。(増やすと左に流れますね。) さて、「? 弄る走査線の本数」「? $210Fに入れたい値」をテーブルに書き込んでいくわけですが、 要するに?に毎フレーム1足せばいいだけです。 REP #$20;2byte扱うんで必要ですね。 LDA ? INC A STA ? SEP #$20;元に戻す。 これだけですね。とっても簡単。 INCの数を増やせば馬鹿みたいに早くなるし、 上を参考に何フレームに何回、という風にすればスピードも自由自在です。 次にマリオと関係して動くもの。 上の例では独立して動きつつ、マリオと関係しても動く海なので難しいですね。 ここでは地面でも山でもいいから、勝手には動かないもので練習。 レイヤー1と関係させて動かすことにしましょう。 $1462(レイヤー1の位置)の値をそのまま?に入れれば、レイヤー1とまったく同じ動きをします。 その走査線の部分だけ「レイヤー2スクロール固定」とおんなじことですね。 半分の速度で動かすには… REP #$20;2byte(ry LDA $1462 LSR A;この辺を変えることで、スクロールの早さが変わります。 STA ? SEP #$20;元に(ry これだけです。LSRの回数を増やしたりして、スクロールスピードを変えることができますね。 ちなみに$1462でなく$1466(レイヤー2位置)でもOK。 その場合LMで設定したレイヤー2のスピードに影響を受けます。 以上を理解してもう一回上を内容を読めば、理解しやすいかも? ?ウィンドウあれこれ 工事中 いよいよ講義1単位分程度のボリュームになってきた(笑)。 コメント
https://w.atwiki.jp/banira777/pages/99.html
https //galge.btdstudio.co.jp/sp/gals_profile.php?app_id=6 gal_id=1341 春花(HD) (18才) 妖怪 B86/W55/H84 https //galge.btdstudio.co.jp/sp/wallpaper/dl.php?gal_id=1341 no=1 ext=png size=1080x1980
https://w.atwiki.jp/banira777/pages/79.html
https //galge.btdstudio.co.jp/sp/gals_profile.php?gal_id=1931 no=1 黛薫(HD)(17才) テニスプレイヤー B97/W62/H88 https //galge.btdstudio.co.jp/sp/wallpaper/dl.php?gal_id=1931 no=1 ext=png size=1080x1980
https://w.atwiki.jp/yuyutoton/pages/3435.html
ロボパーツ一覧(五十音順) HD(ア行~ナ行 / ハ行~その他) BD(ア行~ナ行 / ハ行~その他) AM(ア行~ナ行 / ハ行~その他) BS(ア行~ナ行 / ハ行~その他) LG(ア行~ナ行 / ハ行~その他) HDJ AMJ BSJ LGJ コンバージョン 武器・その他 手持ち武器(メイン / サブ) 内蔵武器(メイン / サブ) チューニングパーツ AURAカートリッジ ボイスメモリ ----+----+----+----+----+----+----+-(関連リンク)-+----+----+----+----+----+----+---- ロボ デルグランダー / デルグランダー★ パーツ LG / BD / HD / BS / AM / AM2LG★ / BD★ / HD★ / BS★ / AM★ / AM2★ おすすめ/HD/デルグランダーHD★データ 入手方法 解説 長所 短所 コメント おすすめ/HD/デルグランダーHD★ データ ◆基本データ 名称 アイコン サイズ 潜在能力(解放後Lv30以上) Rank 特殊効果 売却額 カスタマイズ特殊制限 デルグランダーHD★ S ?(?) C-3 ? 未調査 C$ なし ◆パーツデータ レベル 重量 コスト HP EN EN回復 射撃 格闘 歩行制限 飛行制限 歩行 飛行 跳躍 物防 ビ防 火防 電防 安定 耐遅 耐凍 1 0.0t 0 0 0 0 (0) x x 0.0t 0.0t x x x x x x x x 0% 0% 30 0.0t 0 0 0 0 (0) x x 0.0t 0.0t x x x x x x x x 0% 0% 50 0.0t 0 0 0 0 (0) x x 0.0t 0.0t x x x x x x x x 0% 0% 70 0.0t 0 0 0 0 (0) x x 0.0t 0.0t x x x x x x x x 0% 0% 入手方法 ロボ販売 - 惑星 シティ パーツ販売 - なし ドロップ - なし その他 - 期間限定ミッション『悪魔の研究室』『ベネブ地下占領作戦』での報酬 解説 デルグランダー★のHD 長所 短所 コメント 誤りの指摘、追加情報など、このページの内容に関するコメントのみお願いします。 質問など、上記以外についてはしたらば掲示板へお願いします。
https://w.atwiki.jp/yuyutoton/pages/3945.html
ロボパーツ一覧(五十音順) HD(ア行~ナ行 / ハ行~その他) BD(ア行~ナ行 / ハ行~その他) AM(ア行~ナ行 / ハ行~その他) BS(ア行~ナ行 / ハ行~その他) LG(ア行~ナ行 / ハ行~その他) HDJ AMJ BSJ LGJ コンバージョン 武器・その他 手持ち武器(メイン / サブ) 内蔵武器(メイン / サブ) 特殊効果付き(パーツ / 武器) チューニングパーツ AURAカートリッジ ----+----+----+----+----+----+----+-(関連リンク)-+----+----+----+----+----+----+---- ロボ ポーンジャーMt / ポーンジャーMt★ パーツ HD / HD2 / BD / AM / BS / LGHD★ / HD2★ / BD★ / AM★ / BS★ / LG★ おすすめ/HD/ポーンジャーMtHD レビュー コメント おすすめ/HD/ポーンジャーMtHD データ ◆基本データ 名称 アイコン タイプ サイズ 潜在能力(解放後Lv30以上,50以上) ランク スタック強化率 特殊効果 売却額 カスタマイズ特記事項 ポーンジャーMtHD 陸戦 S S(SS,SS) R-2 6.0% ショック耐性50 174C$ なし ◆パーツデータ レベル 重量 コスト HP EN EN回復 射撃 格闘 歩行制限 飛行制限 歩行 飛行 跳躍 物防 ビ防 火防 電防 安定 耐遅 耐凍 1 12.0t 37 155 120 47 - - -t -t - - - - - - - - -% -% 30 12.0t 124 310 270 90 - - -t -t - - - - - - - - -% -% 50 12.0t 257 460 410 130 - - -t -t - - - - - - - - -% -% 70 12.0t 336 530 480 149 - - -t -t - - - - - - - - -% -% 90 12.0t 336 635 870 149 - - -t -t - - - - - - - - -% -% 入手方法 ロボ販売 - なし パーツ販売 - なし ドロップ - 曜日ダンジョン(ポーンジャーMtゲットキャンペーン中限定) その他 - イベントクエスト レビュー ポーンジャーMtのHD。 縦に長い形が特徴で、ポーンジャーとは外見が大きく異なる。 ポーンジャーMtゲットキャンペーンの期間中、曜日ダンジョンでドロップする。キャンペーンの一環であるイベントクエストでも貰える。 秘石を用いて強化版の★付きにすることが出来る。 長所 HP・EN量が多い。 ポーンジャーMtのパーツ共通で、50という凄まじいショック耐性を持つ。 ドロップ率が高いため入手は容易。クエストでの入手も可能。 短所 Sサイズ機のHDとしては12tと重め。 イベント限定品かつトレード不可なので、機会を逃した場合は次のイベント開催を待つ必要がある。 コメント 名前 コメント 誤りの指摘、追加情報など、このページの内容に関するコメントのみお願いします。 上記以外については質問雑談用ページの方でお願いします。
https://w.atwiki.jp/dporico/pages/187.html
1.KAMAITACHI 2.Session 9 -Chronicles- 3.ミラージュ・レジデンス 4.LASER CRUSTER 総Notes6651 AAA 11824 AA 10346 A 8868 参加者32名 平均スコア9560.66 AAA 88.89% AA 77.78% A 66.67% RANK DJ NAME LEVEL SCORE (PG/G) 達成率(%) 1 TERROR AAA 12194 (5735/724) 91.67 2 FUSEI3 AA 11678 (5245/1188) 87.79 3 ALCOTT AA 11357 (5046/1265) 85.38 4 ILL AA 10876 (4690/1496) 81.76 5 KOYA-N AA 10835 (4726/1383) 81.45 6 OBAQN* AA 10393 (4334/1725) 78.13 7 QWERTY A 10081 (4217/1647) 75.79 8 LITCHI A 9998 (4185/1628) 75.16 9 S.Y-T A 9975 (4139/1697) 74.99 10 SROF A 9954 (4085/1784) 74.83 11 ANEM A 9948 (4131/1686) 74.79 12 73KIAI A 9937 (4088/1761) 74.7 13 ZERYU- A 9785 (4111/1563) 73.56 14 DABOH3 A 9693 (3962/1769) 72.87 15 MEKABU A 9691 (3917/1857) 72.85 16 GUNDAN A 9578 (3836/1906) 72 17 KAREKI A 9572 (3910/1752) 71.96 18 FOON A 9318 (3801/1716) 70.05 19 YILMAZ A 9249 (3721/1807) 69.53 20 SIRANE A 9230 (3731/1768) 69.39 21 TAKY A 9184 (3712/1760) 69.04 22 PUBLIC A 9087 (3674/1739) 68.31 23 ROKDO A 8948 (3628/1692) 67.27 24 TUKASA A 8935 (3563/1809) 67.17 25 -AOI- B 8829 (3517/1795) 66.37 26 EDYTHA B 8688 (3446/1796) 65.31 27 RIGHT B 8520 (3454/1612) 64.05 28 HEVO. B 8462 (3384/1694) 63.61 29 RYDIA B 8306 (3245/1816) 62.44 30 MY B 8233 (3258/1717) 61.89 31 *SASA B 7942 (3041/1860) 59.71 32 SANKU B 7465 (2852/1761) 56.12
https://w.atwiki.jp/dporico/pages/184.html
1.EXUSIA 2.Colorful Cookie 3.Karma 4.Cheer Train 総Notes6365 AAA 11316 AA 9902 A 8487 参加者31名 平均スコア9444.39 AAA 88.89% AA 77.78% A 66.67% RANK DJ NAME LEVEL SCORE(PG/G) 達成率(%) 1 EMEMAN AAA 11466(5316/834) 90.07 2 FUSEI3 AA 11246(5126/994) 88.34 3 LAN.89 AA 11168(5099/970) 87.73 4 ALCOTT AA 11078(4956/1166) 87.02 5 ILL AA 10907(4782/1343) 85.68 6 KOYA-N AA 10805(4738/1329) 84.88 7 OBAQN* AA 10801(4721/1359) 84.85 8 23EMON AA 10231(4258/1515) 80.37 9 QWERTY AA 10102(4243/1616) 79.36 10 KAREKI A 9780(4005/1770) 76.83 11 LITCHI A 9746(3964/1818) 76.56 12 23ERI5 A 9695(3897/1901) 76.16 13 ZAKI A 9651(4054/1543) 75.81 14 281SOX A 9580(3876/1828) 75.26 15 TUKASA A 9408(3792/1824) 73.9 16 FOON A 9376(3863/1650) 73.65 17 TAKY A 9148(3688/1772) 71.86 18 GUNDAN A 9146(3625/1896) 71.85 19 YILMAZ A 9106(3639/1828) 71.53 20 ROKDO A 9071(3631/1809) 71.26 21 RYO A 8973(3524/1925) 70.49 22 *SASA A 8890(3490/1910) 69.84 23 EDYTHA A 8864(3425/2014) 69.63 24 S.Y-T A 8690(3320/2050) 68.26 25 TW.NAO A 8553(3262/2029) 67.19 26 SUMIRE B 8370(3158/2054) 65.75 27 RIGHT B 8361(3353/1655) 65.68 28 HEVO. B 8340(3098/2144) 65.51 29 MY B 7921(3023/1875) 62.22 30 100SGM B 7726(2794/2138) 60.69 31 IKAKUN C 6577(2281/2015) 51.67
https://w.atwiki.jp/bfgmatome/pages/373.html
ゲーム情報(登録されているタグ) シリーズ>Fishdom ジャンル>パズル ジャンル>マッチ3 製作会社>Playrix Entertainment 製作会社>未確認 言語>英語 コメント欄へ移動 ゲーム配布ページ 英語 http //www.bigfishgames.com/download-games/8589/fishdom-2/index.html 日本語 紹介文 Dive into awesome Match 3 fun in Fishdom 2! Swap colorful tiles and earn tons of money to create the aquarium of your dreams! Let your imagination run wild as you unlock and decorate uniquely-themed tanks. Polish your aquarium design skills while having fun with your exotic finned pets. Top it with an educational Fishipedia containing fun facts about Fishdom sea creatures, and a bonus screensaver! Fun minigames Unique Fishipedia Dive into Match 3 fun! 画像 « » var ppvArray_0_7c249b3ee094a4b532fd1a194f96a527 = new Array(); ppvArray_0_7c249b3ee094a4b532fd1a194f96a527[0] = http //w.atwiki.jp/bfgmatome/?cmd=upload&act=open&page=Fishdom+2&file=en_fishdom-2-screen1.jpg ; window.onload=function(){ ppvShow_0_7c249b3ee094a4b532fd1a194f96a527(0); }; function ppvShow_0_7c249b3ee094a4b532fd1a194f96a527(n){ if(!ppvArray_0_7c249b3ee094a4b532fd1a194f96a527[n]){ alert( 画像がありません ); return; } ppv_0_7c249b3ee094a4b532fd1a194f96a527$( ppv_img_0_7c249b3ee094a4b532fd1a194f96a527 ).src=ppvArray_0_7c249b3ee094a4b532fd1a194f96a527[n]; ppv_0_7c249b3ee094a4b532fd1a194f96a527$( ppv_link_0_7c249b3ee094a4b532fd1a194f96a527 ).href=ppvArray_0_7c249b3ee094a4b532fd1a194f96a527[n]; ppv_0_7c249b3ee094a4b532fd1a194f96a527$( ppv_prev_0_7c249b3ee094a4b532fd1a194f96a527 ).href= javascript ppvShow_0_7c249b3ee094a4b532fd1a194f96a527( +(n-1)+ ) ; ppv_0_7c249b3ee094a4b532fd1a194f96a527$( ppv_next_0_7c249b3ee094a4b532fd1a194f96a527 ).href= javascript ppvShow_0_7c249b3ee094a4b532fd1a194f96a527( +(n+1)+ ) ; } function ppv_0_7c249b3ee094a4b532fd1a194f96a527$(){ var elements = new Array(); for (var i = 0; i arguments.length; i++){ var element = arguments[i]; if (typeof element == string ) element = document.getElementById(element); if (arguments.length == 1) return element; elements.push(element); } return elements; } 備考 レス一覧 276 名前: 名無しさんの野望 [sage] 投稿日: 2010/07/08(木) 09 50 21 ID LEKBZg0e Fishdom 2 キター!! 夏らしくてさわやか~v お魚たちのグラフィックもよくなって楽しい! 617 名前: 名無しさんの野望 [sage] 投稿日: 2010/08/23(月) 13 13 45 ID acwvNHXb . 616 何が好きかっていう、好みによるってばw マッチ3やマーブルポッパー、麻雀あたりで探してみたらどうだろう 日本語版無くても、何となくで出来るし 4精霊の魔法書、80 日間世界一周、フィッシュダム(シリーズ多)、 敏腕ドクター:メルを救え! Cafe Mahjongg、Mahjongg Dimensions Deluxe あたりが楽しかったよ コメント 名前 コメント トップページに戻る
https://w.atwiki.jp/amazonapp/pages/90.html
Simply HDR Simply HDR 期間 2015/2/24 コメント 名前
https://w.atwiki.jp/aatrpg/pages/371.html
/}/  ̄//|__ /{/ ∠ ___|\| r‐、 \ ( \ | | / ..\ \ノ | ,/イこ _ ̄` | __|,/ |/ | \ `ヽ, , | / // \ レヘ |\Nと二 と´ {. 人// }ニニrく\,| ‘, ヽ 、 ,. '  ̄ ̄ } }、 ヽ.__ \ i ノ/ } ..\ \ ゚. ,/ ヽ、 u [_ノノ } .\ \.∨ 〉 { \ У / } \ ヽ. / | \ // ` 、 | { { > _ レルヘ { { √ ̄`ヽ \__/ {{ / ∧ ハ | ̄ | 【パーソナルデータ】 名 前 土御門 元春 性 別 男 年 齢 16 人 種 クラス 情報将校 出 自 生き別れ 境 遇 古参兵 階 級 中尉 H P 16/16 現在アガペー 567 獲得ロゴス 44 獲得チット 5 【能力値】 【肉体】 【感覚】 【理知】 【聖霊】 【階級】 基本値 02 01 00 00 02 (追加20点) 01 07 03 07 02 経験点 00 00 00 00 00 ヴィークル 03 02 01 00 00 その他 00 02 00 03 03 判定値 06 12 04 10 07 【負傷】 ゲージ ヴィークル 軽傷 ○○○ ○○○○○○○○○○○○○○ 重症 ○○ ○○○○○○ 致命傷 ○ ○○ 死亡 ○ ○ 【技能】(5) 肉体ベース 感覚ベース 理知ベース 聖霊ベース 階級ベース 《運動》 ●○○○○ 《射撃戦闘》 ●●●○○ 《情報処理》 ●●●○○ 《意思力》 ●○○○○ 《軍略》 ●●●○○ 《回避》 ●○○○○ 《整備》 ●○○○○ 《誘導兵器》 ●○○○○ 《エーテル》 ●○○○○ 《陳情》 ●●●●○ 《格闘戦闘》 ●○○○○ 《探知》 ●●○○○ 《事情通》 ●○○○○ 《芸事》 ●○○○○ 《白兵戦闘》 ●○○○○ 《砲術戦闘》 ●○○○○ 《調達》 ●○○○○ 《話術》 ●○○○○ 【SA/特技】(10×5=50) 【SA】 名称 タイミング 技能 修正 難易度 対象 射程 代償 参照 忠誠 常時 ― ― ― 自身 ― ロゴスX P-67 【特技】 名称 タイミング 技能 修正 難易度 対象 射程 代償 参照 《戦闘》 距離外射撃 攻撃宣言ステップ なし なし なし 自身 視界 ロゴス1 P-71 操気術 D決定ステップ なし なし なし 自身 ― ロゴスX P-72 反応射撃 リアクション 射撃戦闘/砲術戦闘 -2 対決 自身 武器 ロゴス3 P-73 《オペレーション》 身代わり D決定ステップ なし なし なし 1体 視界 ロゴス4 P-76 《戦闘指揮》 根回し メジャー 陳情 なし なし 自身 ― ロゴス2 P-78 ミサイル支援 メジャー 軍略 -3 0 シーン 視界 ロゴス5 P-78 《交渉》 神の舌 常時 なし なし なし 自身 なし なし P-79 超推理 常時 なし なし なし 自身 なし ロゴス1 P-79 【装備】(6+7+7+16+4=40) ヴィークル 名称 種別 肉体修正 感覚修正 理知修正 装甲 軽傷ゲージ 重症ゲージ 致命傷ゲージ 死亡ゲージ HDP 飛行 乗員 参照 アペルギア 人間戦車 03 02 01 35 14 06 02 01 ― ○ 1人 P-89 ア―マメント 名称 種別 使用技能 命中修正 ダメージ 射程 回数 形式 設置位置 対天使 参照 35㎜機関砲 搭載火器 《射撃戦闘》 -1 13 1km ∞ F H × P-94 20㎜アサルトライフル 搭載火器 《射撃戦闘》 -5 22 2.5km 10 S/F 両手 ○ P-94 一般アイテム 名称 種別 装備コスト 参照 MK23 拳銃 00 P-82 ヘルメット 防具 00 P-85 防弾チョッキ 防具 00 P-85 軍靴 防具 00 P-86 内蔵通信機 インプラント 07 P-86 神経強化 インプラント 16 P-86 呪法徹甲弾 弾薬 04 P-98 信号弾 一般 00 P-98 軍制服 一般 00 P- 携帯電話 一般 00 P- 【ダーザイン】 キャラクター 感情 レベル テレサ・テッサロッサからの 信頼 ●●●●○ 自己からの 執着 ●●●●○ 菊池真からの 嘘つき ●●●○○ 基地からの 期待 ●●●●○ 美樹さやかからの 疑惑 ●●●●○ ●●○○○ ●●○○○ 【初期アガペー】 アガペー上昇 クラス初期値 580 特徴/能力値上昇 000 技能Lv上昇 005 特技の取得 030 装備の取得 040 合計/上限660 655 【経験点】 獲得 5点 《神の舌》 5点 《超推理》 合計 10/10